理解ROS节点和话题
ROS系统包括多个独立的节点,每个节点通过一个发布/订阅的消息范式与其他节点联系
!如下图中,publisher和subscriber都可以是节点(node)
举个具体例子: ROS starts with the ROS Master. Let’s say we have a camera on our Robot. We want to be able to see the images from the camera, both on the Robot itself, and on another laptop. ROS开始于一个Master,一如我们的机器人上有个摄像头,然后我们想在机器人和笔记本上看到照片,笔记本就有一个Image display(IDN)节点,同时机器人上也有节点,一个是Image Processing Node(IRN), 另一个是Camera Node(CN)。
首先,所有的节点都要到Master登记(register),这样Master才能知道信息要传到哪个节点 比如,CN会说他会发布XX信息(这里是image_data),其他两节点则说要订阅这个信息。 接着他收到信息后就把信息发给其他两节点了。 也可以订阅特殊服务。
•rospy = python 客户端库 •roscpp = c++ 客户端库
接下来我们说一下ROS的与节点和话题有关的命令
我们运行roscore,这是我们运行所有ros程序前首先要运行的命令
$ roscore
打开一个新的终端
rosnode list
列出正在运行的节点,这里我们可以看到/rosout,这个节点用于收集和记录节点调试输出信息。
rosnode info [node_name]
这个命令可以返回关于一个特定节点的信息,这里node_name是/rosout
rosrun [package_name] [node_name]
我们运行模拟器turtlesim试试$ rosrun turtlesim turtlesim_node,这里会出现一个窗口,窗口上有只龟
rosrun turtlesim turtlesim_node __name:=my_turtle
改节点名,不过仅当前有效,下次打开仍然是turtlesim_node。
再打开另一个终端。
rosrun turtlesim turtle_teleop_key
turtle_teleop_key是turtlesim的另一个节点,可以通过键盘控制乌龟运动为了直观看到节点与节点之间的关系,我们要安装rq t
sudo apt-get install ros-indigo-rqt
sudo apt-get install ros-indigo-rqt-common-plugins
再开新终端
rosrun rqt_graph rqt_graph
这里弹出个新窗口就可以看到node 和topic了
下面介绍rostopic命令
rostopic -h
可以看到rostopic的子命令rostopic echo [topic]
实时显示该话题的信息,如果你看看rqt的窗口,可以看到这个rostopic节点也在订阅话题rostopic list -v
将每个节点的详细信息列出来,其他的可以通过命令rostopic list -h看。rostopic type [topic]
rosmsg show turtlesim/Velocity
这命令列出话题的类型,第二个命令则将该话题所期望的消息类型列出来rostopic pub [topic] [msg_type] [args]
这命令是把数据发布到当前正在广播的某个话题上。rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
对比上面两条命令。先说共同的: rostopic pub 将消息给到topic /turtle1/cmd_vel 这是节点 geometry_msgs/Twist 消息类型 ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’参数,由rosmsg show geometry_msgs/Twist得需要线速度角速度x,y,z三个参数下面是不同点 第一个命令有-1,使rostopic发布一条消息后马上退出(这里没去rqt上看推出了没有) 第二个命令则是-r 1 ,意思是以1Hz的频率发布命令,这里从rqt上可以看到发布消息的节点多了一个
rostopic hz /turtle1/pose
可以看到turtlesim_node发布/turtle/pose时的速度